# -*- coding: utf-8 -*-
import math
from mod.client.ui.controls.scrollViewUIControl import ScrollViewUIControl
from legendaryPowerClientScript.ui.base.baseComponent import BaseComponent
from legendaryPowerClientScript.util import apiUtil
class ListComponent(BaseComponent):
    # type: () -> None
    """
    列表组件，用于管理列表的显示，滚动，增删和其它操作。
    注意：这里的列表不一定是原版的“滚动列表”组件。它也可以是一个面板，图片，或是任何一个有大量子组件的内容

    使用方式：
    若要使用此控件，配置UI文件时，列表的内容必须有一个等待被复制的组件，格式为“xxxx_0”：比如：

    main:
        panel:
            button_0  <- 由于名字里有 _0，在增删元素时会复制它。
            background <- 名字里没有 _0， 所以不会被视为是列表中的元素，不会管它。如果要操作它，普通地用 list.getImage("background")即可

    那么，就可以用以下代码实现展示五个按钮的列表，且将每个按钮的文字改为其序号的效果：

    data = ["第一按钮","第二按钮","第三按钮","第四按钮","第五按钮"]
    list = ui.getList("panel"， {“typeHint”: "Button"}) #若不指定子控件的类型，系统只能挨个去猜它的类型，效率较低
    list.SetElementSize(len(data))
    for i, text in enumerate(data):
        ele = list.GetElement(i)
        ele.SetText(text)

    创建列表时可传入的参数有：
        typeHint: 列表元素类型提示，可用的有 Base Button Image Label List（是的，列表里可以嵌套列表） Slider Item ItemRenderer Toggle SelectAmount Progressbar Textbox
        initialPos: 首个元素的初始位置，默认即0号元素的初始位置
        spanX: 每个元素的X间距
        spanY: 每个元素的Y间距
        adjustX: 当子元素铺满横轴时，是否要True=扩宽列表，还是False=让元素另起一行？默认False
        eleSize: 子元素的宽高。默认以0号元素的初始宽高为准
        autoPos: 新增元素时，是否将它的位置改到应在的位置上？默认True
        adjustSize: 当子元素铺满纵轴时，是否要True=扩宽列表，还是False=不管？默认True
        isManualListX: 是否此列表可以横向拖拽？要求列表本身必须是个按钮控件。（由于原生没此功能，这是我自己实现的效果，体验和原版会有些许差别）
        isManualListY: 是否此列表可以纵向拖拽？如果和上面的一起打开，则可以四方向自由拖拽
        xSize： 横轴上的最大元素数量。默认=列表宽度/(元素宽度+X间距)
    """

    def SetScrollViewPercentValue(self, percent_value):
        """
        （列表本体是滚动列表时）设置滚动视图当前的百分比值。

        Args:
            percent_value (float): 百分比值。
        """
        pass

    def setAddElementCallback(self, callback):
        # type: (callable) -> None
        """
        在列表新增控件时，会触发传入的回调。一般用于完成新增的控件的初始化，如注册点击回调等。每个控件只会调用一次！
        Args:
            callback (callable): 新增元素时的回调。接受一个参数，即新增的控件对象
        """
        pass

    def SetElementSize(self, count):
        # type: (int) -> None
        """
        设置列表的元素数量。用法详见此类的描述
        Args:
            count (int): 元素数量
        """
        pass

    def GetElement(self, index):
        # type: (int) -> BaseComponent
        """
        获取列表的第[index]个控件
        Args:
            index (int): 控件序号
        Returns:
            element (BaseComponent): 指定的控件。控件直接就是它对应类的实例，如ImageComponent
        """
        pass

